package fr.syntheses.blog.Service.sax;

import java.sql.Timestamp;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import fr.syntheses.blog.Service.convertors.DateConvertor;
import fr.syntheses.blog.beans.Article;
import fr.syntheses.blog.beans.Utilisateur;
import fr.syntheses.blog.beans.Categorie;

public class ReadFile {
	
	List<Article> listArticles = new ArrayList<>();
	DateConvertor dc = new DateConvertor();
	Utilisateur auteur = new Utilisateur();
	Categorie categorie = new Categorie();
	   

	/**
	 * @return the listArticles
	 */
	public List<Article> getListArticles() {
		return listArticles;
	}



	/**
	 * @param listArticles the listArticles to set
	 */
	public void setListArticles(List<Article> listArticles) {
		this.listArticles = listArticles;
	}



	public List<Article> readFile(String fileName) {
	 
	    try {
	 
		SAXParserFactory factory = SAXParserFactory.newInstance();
		SAXParser saxParser = factory.newSAXParser();
		
	 
		DefaultHandler handler = new DefaultHandler() {
	 
		boolean btitre = false;
		boolean bcontenu = false;
		boolean bdatepublication = false;
		boolean bauteur = false;
		boolean bcategorie = false;
	    Article article;

		
		public void startElement(String uri, String localName,String qName, 
	                Attributes attributes) throws SAXException {
	 
			System.out.println("Start Element :" + qName);
			
 
			if (qName.equalsIgnoreCase("titre")) {
				article = new Article();
				btitre = true;
			}
	 
			if (qName.equalsIgnoreCase("contenu")) {
				bcontenu = true;
			}
	 
			if (qName.equalsIgnoreCase("datepublication")) {
				bdatepublication = true;
			}
	 
			if (qName.equalsIgnoreCase("auteur")) {
				bauteur = true;
			}

			if (qName.equalsIgnoreCase("categorie")) {
				bcategorie = true;
			}
			
		}
	 
		public void endElement(String uri, String localName,
			String qName) throws SAXException {
	 
			if (qName.equalsIgnoreCase("categorie")) {
				listArticles.add((Article)article);
			}
	 
		}
	 
		public void characters(char ch[], int start, int length) throws SAXException {

			String sTitre=null;
			sTitre=new String(ch, start, length);
			
			if (btitre) {
				article.setTitre(sTitre);
				btitre = false;
			}
	 
			if (bcontenu) {
				article.setContenu(sTitre);
				bcontenu = false;
			}
	 
			if (bdatepublication) {
				try {
					
					article.setDatepublication(dc.stringToTimeStamp(sTitre));
					
				} catch (ParseException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				bdatepublication = false;
			}
	 

			if (bauteur) {
				auteur.setLogin(sTitre);
				article.setAuteur(auteur);
				bauteur = false;
			}
	 
			if (bcategorie) {
				categorie.setCategorie(sTitre);
				article.setCategorie(categorie);
				bcategorie = false;
			}

		}
	 
		};
	 
		
		saxParser.parse(fileName, handler);
	     } catch (Exception e) {
	       e.printStackTrace();
	     }
	    System.out.println(listArticles);
	    return listArticles;
	 
	   }
	 
	
}
